Various types of non-volatile storage media such as, for example, relatively high latency (i.e., longer access times) hard disk drive devices (HDDs) and relatively low latency (i.e., shorter access times) solid-state devices (SSDs) such as flash memory or DRAM can be used for storing information. HDDs generally provide good streaming performance (e.g., reading of large sequential blocks or “track reads”) but do not perform well on random access (i.e., reading and writing of individual disk sectors) due to slow access times. SSDs, on the other hand, are more suitable for random and frequent memory accesses because of their relatively low latency. With no moving parts, SSDs do not have mechanical delays resulting in the high latency experienced by HDDs and seek time is decreased significantly, making the SSDs very fast.
Flash memory is generally accepted as a new tier in the memory hierarchy between DRAM and disk. In terms of cost per gigabyte (GB), DRAM capacity is more expensive than flash capacity, which is more expensive than hard disk capacity. At the same time, DRAM latencies are less than flash, and flash latencies are less than hard disk. As a result, the cost per input/output (I/O) operation of flash memory is between DRAM and magnetic media. This placement in the memory hierarchy often makes flash memories ideal for caching.
While flash and other solid-state memories sometimes provide for the same interface as a SCSI or SATA drive, the underlying operation, implementation, and performance between solid-state memories and SCSI or SATA drives may differ substantially. For example, one of the primary differences is that storage locations in SSDs need to be erased before information can be written to them. The device is typically erased in units (erase blocks) larger than a traditional write unit (sectors). Even with these operational differences, SSDs often use the input/output interfaces developed for HDDs. As a result, the integration and implementation of SSD memories based on algorithms developed for HDD may not capture the full benefit of SSD memories, since the algorithms are not optimized for the characteristics of SSD based storage. Consequently, improved techniques are needed to employ more effectively flash memory and other solid-state devices.